// malred-vue-template-js/src/components/INDEX.js
/*
 * @Author Malred
 * @Date 2025-05-31 08:19:15
 * @Description 自动注册组件
 */
import {defineAsyncComponent} from "vue";

// 修改转换逻辑，将短横线转为驼峰再首字母大写
function toPascalCase(str) {
    return str
        .split('-')
        .map(p => p.charAt(0).toUpperCase() + p.slice(1))
        .join('')
}

/*export default {
    install: async (app) => {
        // 扫描当前目录下的vue
        const components = import.meta.glob('./!**!/!*.vue')

        for (const path in components) {
            const componentName = path
                .replace(/^\.\//, '')
                .replace(/\.\w+$/, '')
                .split('/')
                .map(toPascalCase)
                .join('')

            // warning: vite动态引入import, 无法解析依赖, 可能影响rollup编译优化
            // 懒加载, 将 import 函数包装成 defineAsyncComponent
            const loadComponent = () => /!*#__PURE__*!/ import(/!* @vite-ignore *!/ path)

            // 添加到vue实例
            app.component(componentName, defineAsyncComponent(loadComponent))
        }
    }
}*/

export default {
    install: (app) => {
        // 同步扫描当前目录下的所有 .vue 文件
        const components = import.meta.glob('./**/*.vue', { eager: true })

        for (const path in components) {
            const componentName = path
                .replace(/^\.\//, '')
                .replace(/\.\w+$/, '')
                .split('/')
                .map(toPascalCase)
                .join('')

            // 获取组件定义（同步）
            const component = components[path].default

            // 注册为全局组件
            app.component(componentName, component)
        }
    }
}

